home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / utility / 406 / utility2 / viruskil.s < prev    next >
Encoding:
Text File  |  1989-08-18  |  31.3 KB  |  1,343 lines

  1. * Virus killer
  2. * Copyright 1989 by M.S.Powell (usqb015@uk.ac.liv)
  3. * Permission granted to exmaine and modify this source for; personal use,
  4. * no profit and as long as this header is left intact.
  5. * Written on Devpac v1.22 by Hisoft
  6.  
  7. numrect    equ    6
  8.  
  9.     move.l    4(sp),a5
  10.     move.l    #end+32000+4096,d0
  11.     move.l    a5,d1
  12.     add.l    d0,d1
  13.     bclr    #0,d1
  14.     move.l    d1,sp
  15.     move.l    d0,-(sp)
  16.     move.l    a5,-(sp)
  17.     pea    $4a0000
  18.     trap    #1
  19.     lea    12(sp),sp
  20.     tst    d0
  21.     beq.s    okay
  22.  
  23.     pea    nomem(pc)
  24.     move    #9,-(sp)
  25.     trap    #1
  26.     addq.l    #6,sp
  27.     pea    $20002
  28.     trap    #13
  29.     addq.l    #4,sp
  30.     bra    exit
  31.  
  32. okay    clr.l    -(sp)
  33.     move    #32,-(sp)
  34.     trap    #1
  35.     addq.l    #6,sp
  36.     move.l    d0,oldssp
  37.  
  38.     dc.w    $a00a
  39.  
  40.     move.l    #end,d0
  41.     add.l    #255,d0
  42.     clr.b    d0
  43.     move.l    d0,screen
  44.  
  45.     move    #$19,-(sp)
  46.     trap    #1
  47.     addq.l    #2,sp
  48.     cmp    #2,d0
  49.     blt.s    drokay
  50.     clr    d0
  51. drokay    move    d0,drive
  52.  
  53.     move    #2,-(sp)
  54.     trap    #14
  55.     addq.l    #2,sp
  56.     move.l    d0,physcrn
  57.     move    #3,-(sp)
  58.     trap    #14
  59.     addq.l    #2,sp
  60.     move.l    d0,logscrn
  61.  
  62.     movem.l    $8240.w,d0-d7
  63.     movem.l    d0-d7,oldpal
  64.  
  65.     move    #4,-(sp)
  66.     trap    #14
  67.     addq.l    #2,sp
  68.     move    d0,oldres
  69.     cmp    #2,d0
  70.     beq.s    hires
  71.     clr    d0
  72. hires    move    d0,res
  73.     move    d0,-(sp)
  74.     move.l    screen(pc),-(sp)
  75.     move.l    (sp),-(sp)
  76.     move    #5,-(sp)
  77.     trap    #14
  78.     lea    12(sp),sp
  79.  
  80.     lea    scrdata(pc),a0
  81.     move.l    screen(pc),a1
  82.     lea    8*160(a1),a1
  83.     move    #2560/4-1,d0
  84. movelp    move.l    (a0)+,(a1)+
  85.     dbra    d0,movelp
  86.  
  87.     move    #$2700,sr
  88.     move.l    $fa06.w,oldier
  89.     clr.b    $fa07.w
  90.     move.b    #$40,$fa09.w
  91.     bclr    #0,$fa0b.w
  92.     bclr    #6,$fa0d.w
  93.     bclr    #0,$fa0f.w
  94.     bclr    #6,$fa11.w
  95.     bset    #0,$fa13.w
  96.     bset    #6,$fa15.w
  97.     move.l    $118.w,oldkeyb
  98.     move.l    #keybrd,$118.w
  99.     move.l    $120.w,oldtimb
  100.     move.l    #timerb,$120.w
  101.     clr.b    $fa1b.w
  102.     move.b    #1,$fa21.w
  103.     move.b    #8,$fa1b.w
  104.     move.l    $456.w,a0
  105.     move.l    (a0),oldvblq
  106.     move.l    #vbl,(a0)
  107.     move.l    #palette,$45a.w
  108.     move    #1,$36.w
  109.     move    #1,$38.w
  110.     move    #$2300,sr
  111.     
  112.     lea    keydat(pc),a0
  113.     moveq    #13-1,d0
  114.     bsr    sendikbd
  115.  
  116.     bsr    wvbl
  117.     lea    icondat(pc),a0
  118.     move.l    screen(pc),a6
  119.     lea    64+32*160(a6),a1
  120.     bsr    drawicon
  121.     lea    16+64*160(a6),a1
  122.     bsr    drawicon
  123.     lea    112+64*160(a6),a1
  124.     bsr    drawicon
  125.     lea    16+120*160(a6),a1
  126.     bsr    drawicon
  127.     lea    112+120*160(a6),a1
  128.     bsr    drawicon
  129.  
  130.     lea    drivedata(pc),a0
  131.     lea    48+40*160(a6),a1
  132.     tst    drive
  133.     bne.s    nota
  134.     lea    96(a0),a0
  135. nota    bsr    drawdrivenum
  136.     lea    drivedata+96*2(pc),a0
  137.     lea    104+40*160(a6),a1
  138.     tst    drive
  139.     beq.s    notb
  140.     lea    96(a0),a0
  141. notb    bsr    drawdrivenum
  142.  
  143.     bsr    mouseon
  144.     move.l    a6,a5
  145.     lea    mainmess(pc),a0
  146.     bsr    printbl
  147.  
  148. * Main loop
  149.  
  150. main    bsr    wvbl
  151.  
  152.     tst    leftbutton
  153.     beq.s    main
  154.  
  155.     lea    recflag(pc),a0
  156.     lea    routlst(pc),a1
  157.     moveq    #numrect-1,d0
  158. chkrect    tst.b    (a0)+
  159.     bne.s    inone
  160.     addq.l    #4,a1
  161.     dbra    d0,chkrect
  162.     bra.s    main
  163.  
  164. inone    move.l    (a1),a1
  165.     lea    buffer(pc),a6
  166.     move.l    screen(pc),a5
  167.     jsr    (a1)
  168.     move.l    #mousedata,mousedatapnt
  169. waitnb    tst    leftbutton
  170.     bne.s    waitnb
  171.     bra.s    main
  172.  
  173.  
  174. drivea    clr    drive
  175.     lea    drivedata+96(pc),a0
  176.     lea    48+40*160(a5),a1
  177.     bsr    mouseoff
  178.     bsr    drawdrivenum
  179.     lea    drivedata+96*2(pc),a0
  180.     lea    104+40*160(a5),a1
  181.     bsr    drawdrivenum
  182.     bra    mouseon
  183.  
  184. driveb    cmp    #1,$4a6.w
  185.     beq.s    dbout
  186.     move    #1,drive
  187.     lea    drivedata(pc),a0
  188.     lea    48+40*160(a5),a1
  189.     bsr    mouseoff
  190.     bsr    drawdrivenum
  191.     lea    drivedata+96*3(pc),a0
  192.     lea    104+40*160(a5),a1
  193.     bsr    drawdrivenum
  194.     bra    mouseon
  195. dbout    rts
  196.  
  197. examine    move.l    #busydata,mousedatapnt
  198.     bsr    clrbl
  199.     bsr    read
  200.  
  201.     lea    $1e(a6),a0
  202.     lea    antivirus(pc),a1
  203.     move    #endanti-antivirus-1,d0
  204. chkavlp    move.b    (a0)+,d1
  205.     cmp.b    (a1)+,d1
  206.     bne.s    notant
  207.     dbra    d0,chkavlp
  208.  
  209.     lea    antin(pc),a0
  210.     bra    printbl
  211.     
  212. notant    move.l    a6,a0
  213.     moveq    #0,d0
  214.     move    #256-1,d1
  215. chklp    add    (a0)+,d0
  216.     dbra    d1,chklp
  217.     cmp    #$1234,d0
  218.     bne.s    notexec
  219.  
  220.     lea    exec(pc),a0
  221.     bra    printbl
  222.  
  223. notexec    lea    noexec(pc),a0
  224.     bra    printbl
  225.  
  226. install    move.l    #busydata,mousedatapnt
  227.     bsr    clrbl
  228.     bsr    read
  229.     bsr    clrboot
  230.     lea    antivirus(pc),a0
  231.     lea    $1e(a6),a1
  232.     move    #endanti-antivirus-1,d0
  233. movealp    move.b    (a0)+,(a1)+
  234.     dbra    d0,movealp
  235.     move    #$601c,(a6)
  236.     bsr    chksum
  237.     move    d1,(a0)
  238.     bsr    write
  239.     lea    insmess(pc),a0
  240.     bra    printbl
  241.  
  242. remove    move.l    #busydata,mousedatapnt
  243.     bsr    clrbl
  244.     bsr    read
  245.     bsr    clrboot
  246.     bsr    chksum
  247.     subq    #1,d1
  248.     move    d1,(a0)
  249.     bsr    write
  250.     lea    remmess(pc),a0
  251.     bra    printbl
  252.  
  253.  
  254. * Various routines
  255.  
  256. sendikbd
  257. keylp    btst    #1,$fc00.w
  258.     beq.s    keylp
  259.     move.b    (a0)+,$fc02.w
  260.     dbra    d0,keylp
  261.     rts
  262.  
  263. clrboot    lea    $1e(a6),a0
  264.     move    #482/2-1,d0
  265. clrbslp    clr    (a0)+
  266.     dbra    d0,clrbslp
  267.     rts
  268.  
  269. chksum    lea    (a6),a0
  270.     moveq    #0,d1
  271.     move    #255-1,d0
  272. chksmlp    add    (a0)+,d1
  273.     dbra    d0,chksmlp
  274.     sub    #$1234,d1
  275.     neg    d1
  276.     rts
  277.  
  278. read    pea    1.w
  279.     pea    $10000
  280.     move    drive(pc),-(sp)
  281.     subq.l    #4,sp
  282.     pea    (a6)
  283.     move    #8,-(sp)
  284.     trap    #14
  285.     lea    20(sp),sp
  286.     tst    d0
  287.     bmi    error
  288.     rts
  289.  
  290. write    pea    1.w
  291.     pea    $10000
  292.     move    drive(pc),-(sp)
  293.     subq.l    #4,sp
  294.     pea    (a6)
  295.     move    #9,-(sp)
  296.     trap    #14
  297.     lea    20(sp),sp
  298.     tst    d0
  299.     bmi    error
  300.     rts
  301.  
  302. printbl    bsr    mouseoff
  303.     lea    1+188*160(a5),a1
  304.     lea    152+188*160(a5),a5
  305.     moveq    #0,d1
  306.     move.b    (a0)+,d1
  307.     subq    #1,d1
  308. prspace    moveq    #32,d0
  309.     bsr    print
  310.     dbra    d1,prspace
  311. prnxtc    move.b    (a0)+,d0
  312.     beq.s    prout
  313.     bsr    print
  314.     bra.s    prnxtc
  315. prout    cmp.l    a1,a5
  316.     beq.s    prex
  317.     move.l    a1,a4
  318.     moveq    #8-1,d0
  319. clrchlp    clr.b    (a4)
  320.     clr.b    2(a4)
  321.     lea    160(a4),a4
  322.     dbra    d0,clrchlp
  323.     move.l    a1,d0
  324.     addq.l    #7,d0
  325.     and    #$fff9,d0
  326.     move.l    d0,a1
  327.     bra.s    prout
  328. prex    bra    mouseon
  329.     
  330. print    ext    d0
  331.     cmp    #'A',d0
  332.     blt.s    punct
  333.     cmp    #'Z',d0
  334.     bgt.s    lowerc
  335.     sub    #64,d0
  336.     bra.s    prit
  337. punct    cmp    #',',d0
  338.     bne.s    notcom
  339.     moveq    #53,d0
  340.     bra.s    prit
  341. notcom    cmp    #'.',d0
  342.     bne.s    notfs
  343.     moveq    #54,d0
  344.     bra.s    prit
  345. notfs    cmp    #'!',d0
  346.     bne.s    notex
  347.     moveq    #55,d0
  348.     bra.s    prit
  349. notex    cmp    #'0',d0
  350.     blt.s    notnum
  351.     cmp    #'9',d0
  352.     bgt.s    notnum
  353.     addq    #8,d0
  354.     bra.s    prit
  355. notnum    moveq    #0,d0
  356.     bra.s    prit
  357. lowerc    cmp    #127,d0
  358.     bne.s    notcpyr
  359.     moveq    #66,d0
  360.     bra.s    prit
  361. notcpyr    sub    #70,d0
  362. prit    add    d0,d0
  363.     add    d0,d0
  364.     add    d0,d0
  365.     lea    chrset(pc),a3
  366.     lea    0(a3,d0),a3
  367.     move.l    a1,a4
  368.     moveq    #8-1,d0
  369. prntlp    move.b    (a3),(a4)
  370.     move.b    (a3)+,2(a4)
  371.     lea    160(a4),a4
  372.     dbra    d0,prntlp
  373.     move.l    a1,d0
  374.     addq.l    #7,d0
  375.     and    #$fff9,d0
  376.     move.l    d0,a1
  377.     rts
  378.  
  379. clrbl    bsr    mouseoff
  380.     lea    8+188*160(a5),a0
  381.     moveq    #0,d1
  382.     moveq    #18-1,d0
  383. clrbtlp    move.l    d1,(a0)
  384.     move.l    d1,160(a0)
  385.     move.l    d1,320(a0)
  386.     move.l    d1,480(a0)
  387.     move.l    d1,640(a0)
  388.     move.l    d1,800(a0)
  389.     move.l    d1,960(a0)
  390.     move.l    d1,1120(a0)
  391.     addq.l    #8,a0
  392.     dbra    d0,clrbtlp
  393.     bra    mouseon
  394.  
  395. error    neg    d0
  396.     lea    errors(pc),a0
  397.     move.b    0(a0,d0),d0
  398.     lea    0(a0,d0),a0
  399.     bra    printbl
  400.  
  401. wvbl    move.l    $466.w,d0
  402. waitlp    cmp.l    $466.w,d0
  403.     beq.s    waitlp
  404.     rts
  405.  
  406. mouseon    movem.l    d0-d7/a0-a2,-(sp)
  407.     bsr    drawm
  408.     movem.l    (sp)+,d0-d7/a0-a2
  409.     move    #1,mouse
  410.     rts
  411.  
  412. mouseoff
  413.     clr    mouse
  414.     movem.l    d0-d7/a0-a2,-(sp)
  415.     bsr    undraw
  416.     movem.l    (sp)+,d0-d7/a0-a2
  417.     rts
  418.  
  419. drawdrivenum
  420.     moveq    #16-1,d0
  421. drawdnlp
  422.     move.l    a1,a2
  423.     move.l    (a0)+,(a2)+
  424.     move    (a0)+,(a2)+
  425.     lea    160(a1),a1
  426.     dbra    d0,drawdnlp
  427.     rts
  428.  
  429. drawicon
  430.     moveq    #32-1,d0
  431. drawilp    move.l    a1,a2
  432.     move.l    (a0)+,(a2)+
  433.     move    (a0)+,(a2)+
  434.     addq.l    #2,a2
  435.     move.l    (a0)+,(a2)+
  436.     move    (a0)+,(a2)+
  437.     addq.l    #2,a2
  438.     move.l    (a0)+,(a2)+
  439.     move    (a0)+,(a2)+
  440.     addq.l    #2,a2
  441.     move.l    (a0)+,(a2)+
  442.     move    (a0)+,(a2)+
  443.     lea    160(a1),a1
  444.     dbra    d0,drawilp
  445.     rts    
  446.  
  447. * Vertical blank handler
  448.  
  449. vbl    clr    $30.w
  450.     subq    #1,$38.w
  451.     bne.s    notnewc
  452.     move    #3,$38.w
  453.     add    #$90,$36.w
  454.     and    #$771,$36.w
  455. notnewc    move    $36.w,$32.w
  456.     move    $38.w,$34.w
  457.     move.b    #1,$fa07.w
  458.  
  459.     tst    mouse
  460.     beq.s    nomouse
  461.  
  462.     bsr    undraw
  463.     bsr    drawm
  464.  
  465.     lea    rectdat(pc),a0
  466.     lea    recflag(pc),a1
  467.     move    mousex(pc),d1
  468.     move    mousey(pc),d2
  469.     moveq    #8-1,d0
  470. rectlp    cmp    (a0),d1
  471.     blt.s    notin
  472.     cmp    2(a0),d2
  473.     blt.s    notin
  474.     cmp    4(a0),d1
  475.     bge.s    notin
  476.     cmp    6(a0),d2
  477.     bge.s    notin
  478.     move.b    #1,(a1)+
  479.     bra.s    nxtrect
  480. notin    clr.b    (a1)+
  481. nxtrect    addq.l    #8,a0
  482.     dbra    d0,rectlp
  483.  
  484. nomouse    rts
  485.  
  486. timerb    cmp    #31,$30.w
  487.     beq.s    endtimb
  488.     move    d0,-(sp)
  489.     move.l    a0,-(sp)
  490.     lea    $8248.w,a0
  491.     move    $32.w,d0
  492.     move    d0,(a0)+
  493.     addq    #1,d0
  494.     move    d0,(a0)+
  495.     addq    #1,d0
  496.     move    d0,(a0)+
  497.     addq    #1,d0
  498.     move    d0,(a0)+
  499.     addq    #1,d0
  500.     move    d0,(a0)+
  501.     addq    #1,d0
  502.     move    d0,(a0)+
  503.     addq    #1,d0
  504.     move    d0,(a0)+
  505.     subq    #1,d0
  506.     move    d0,(a0)+
  507.     subq    #1,d0
  508.     move    d0,(a0)+
  509.     subq    #1,d0
  510.     move    d0,(a0)+
  511.     subq    #1,d0
  512.     move    d0,(a0)+
  513.     subq    #1,d0
  514.     move    d0,(a0)+
  515.     subq    #1,d0
  516.     move    d0,$8248.w
  517.     move.l    (sp)+,a0
  518.     move    (sp)+,d0
  519.     subq    #1,$34.w
  520.     bne.s    noc
  521.     move    #3,$34.w
  522.     add    #$90,$32.w
  523.     and    #$771,$32.w
  524. noc    addq    #1,$30.w
  525.     clr.b    $fa0f.w
  526.     rte
  527. endtimb    btst    #1,$fc00.w
  528.     beq.s    notempt
  529.     move.b    #$d,$fc02.w
  530. notempt    movem.l    d0-d7,-(sp)
  531.     movem.l    palette(pc),d0-d7
  532.     movem.l    d0-d7,$8240.w
  533.     movem.l    (sp)+,d0-d7
  534.     clr.b    $fa07.w
  535.     clr.b    $fa0f.w
  536.     rte    
  537.     
  538. drawm    moveq    #0,d0
  539.     move    mousey(pc),d0
  540.     move    d0,d1
  541.     add    d0,d0
  542.     add    d0,d0
  543.     add    d1,d0
  544.     lsl    #5,d0
  545.     move    mousex(pc),d1
  546.     move    d1,d2
  547.     lsr    #1,d1
  548.     and    #$fff8,d1
  549.     add    d1,d0
  550.     move.l    screen(pc),a0
  551.     add.l    d0,a0
  552.     and    #$f,d2
  553.     lea    trash(pc),a1
  554.     move.l    mousedatapnt(pc),a2
  555.     move.l    a0,(a1)+
  556.     move    #200,d3
  557.     sub    mousey(pc),d3
  558.     cmp    #16,d3
  559.     ble.s    fulsize
  560.     moveq    #16,d3
  561. fulsize    subq    #1,d3
  562.     move    d3,(a1)+
  563.     cmp    #152,d1
  564.     beq.s    rightedge
  565. drawlp    movem.l    (a0),d4-d7
  566.     movem.l    d4-d7,(a1)
  567.     lea    16(a1),a1
  568.     moveq    #0,d0
  569.     move    (a2)+,d0
  570.     not    d0
  571.     swap    d0
  572.     lsr.l    d2,d0
  573.     not.l    d0
  574.     move.l    a0,a4
  575.     swap    d0
  576.     and    d0,(a4)+
  577.     and    d0,(a4)+
  578.     and    d0,(a4)+
  579.     and    d0,(a4)+
  580.     swap    d0
  581.     and    d0,(a4)+
  582.     and    d0,(a4)+
  583.     and    d0,(a4)+
  584.     and    d0,(a4)+
  585.     moveq    #0,d0
  586.     move    (a2)+,d0
  587.     swap    d0
  588.     lsr.l    d2,d0
  589.     or    d0,8(a0)
  590.     swap    d0
  591.     or    d0,(a0)
  592.     moveq    #0,d0
  593.     move    (a2)+,d0
  594.     swap    d0
  595.     lsr.l    d2,d0
  596.     or    d0,10(a0)
  597.     swap    d0
  598.     or    d0,2(a0)
  599.     lea    160(a0),a0
  600.     dbra    d3,drawlp
  601.     rts
  602. rightedge
  603.     movem.l    (a0),d4-d7
  604.     movem.l    d4-d7,(a1)
  605.     lea    16(a1),a1
  606.     move    (a2)+,d0
  607.     not    d0
  608.     lsr    d2,d0
  609.     not    d0
  610.     move.l    a0,a4
  611.     and    d0,(a4)+
  612.     and    d0,(a4)+
  613.     and    d0,(a4)+
  614.     and    d0,(a4)+
  615.     move    (a2)+,d0
  616.     lsr    d2,d0
  617.     or    d0,(a0)
  618.     move    (a2)+,d0
  619.     lsr    d2,d0
  620.     or    d0,2(a0)
  621.     lea    160(a0),a0
  622.     dbra    d3,rightedge
  623.     rts
  624.  
  625. undraw    lea    trash(pc),a0
  626.     move.l    (a0)+,a1
  627.     move    (a0)+,d4
  628. undrlp    movem.l    (a0)+,d0-d3
  629.     movem.l    d0-d3,(a1)
  630.     lea    160(a1),a1
  631.     dbra    d4,undrlp
  632.     rts
  633.  
  634.  
  635. * Keyboard handler
  636.     
  637. keybrd    movem.l    d0-d1/a0,-(sp)
  638.  
  639. again    move.b    $fc00.w,d1
  640.     btst    #7,d1
  641.     beq    keyout
  642.     btst    #0,d1
  643.     beq    keyo
  644.  
  645.     moveq    #0,d0
  646.     move.b    $fc02.w,d0
  647.     tst    length
  648.     beq.s    nopack
  649.  
  650.     move.l    bufpnt(pc),a0
  651.     move.b    d0,(a0)+
  652.     move.l    a0,bufpnt
  653.     subq    #1,length
  654.     bne    keyo
  655.  
  656.     lea    keybuf(pc),a0
  657.     cmp.b    #$f7,(a0)+
  658.     bne.s    keyo
  659.  
  660.     addq.l    #1,a0
  661.     move    (a0)+,mousex
  662.     move    (a0)+,mousey
  663.     bra.s    keyo
  664.  
  665. nopack    cmp    #$f6,d0
  666.     blt.s    akey
  667.  
  668.     lea    keybuf(pc),a0
  669.     move.b    d0,(a0)+
  670.     move.l    a0,bufpnt
  671.     sub    #$f6,d0
  672.     move.b    lengths(pc,d0),d0
  673.     move    d0,length
  674.     bra.s    keyo
  675.  
  676. lengths    dc.b    7,5,2,2,2,2,6,2,1,1
  677.  
  678. akey    move    d0,keys
  679.     cmp    #$74,d0
  680.     bne.s    notlon
  681.     move    #1,leftbutton
  682.     bra.s    keyo
  683. notlon    cmp    #$f4,d0
  684.     bne.s    keyo
  685.     clr    leftbutton
  686.  
  687. keyo    btst    #5,d1
  688.     beq.s    keyout
  689.  
  690.     move.b    $fc02.w,d0
  691.  
  692. keyout    btst    #4,$fa01.w
  693.     beq    again
  694.  
  695.     movem.l    (sp)+,d0-d1/a0
  696.     bclr    #6,$fa11.w
  697.     rte
  698.  
  699. * Return to desktop
  700.  
  701. desktop    move    #$2700,sr
  702.     move.l    oldier(pc),$fa06.w
  703.     move.l    oldkeyb(pc),$118.w
  704.     move.l    $456.w,a0
  705.     move.l    oldvblq(pc),(a0)
  706.     move    #$2300,sr
  707.  
  708.     lea    keydat1(pc),a0
  709.     moveq    #3-1,d0
  710.     bsr    sendikbd
  711.  
  712.     movem.l    oldpal(pc),d0-d7
  713.     movem.l    d0-d7,$8240.w
  714.  
  715.     move    oldres(pc),-(sp)
  716.     move.l    physcrn(pc),-(sp)
  717.     move.l    logscrn(pc),-(sp)
  718.     move    #5,-(sp)
  719.     trap    #14
  720.     lea    12(sp),sp
  721.     move.l    oldssp(pc),-(sp)
  722.     move    #32,-(sp)
  723.     trap    #1
  724.     addq.l    #6,sp
  725. exit    clr    -(sp)
  726.     trap    #1
  727.  
  728. * The anti-virus!
  729.  
  730. antivirus
  731.     move.l    #$5000777,$8240.w
  732.  
  733.     move    #4,-(sp)
  734.     trap    #14
  735.     addq.l    #2,sp
  736.     move    d0,d7
  737.     beq.s    lores
  738.  
  739.     lea    starti(pc),a0
  740.     lea    $140.w,a1
  741.     move.l    a1,a2
  742.     move    #endi-starti-1,d0
  743. moveilp    move.b    (a0)+,(a1)+
  744.     dbra    d0,moveilp
  745.     move.l    $456.w,a0
  746.     move.l    a2,28(a0)
  747.  
  748. lores    move.l    $44e.w,a0
  749.     lea    92*160+2*8(a0),a0
  750.     tst    d7
  751.     beq.s    nhires
  752.     subq.l    #8,a0
  753. nhires    lea    mess(pc),a1
  754.     lea    chars-8(pc),a2
  755. prvflp    moveq    #0,d0
  756.     move.b    (a1)+,d0
  757.     beq.s    donevf
  758.     add    d0,d0
  759.     add    d0,d0
  760.     add    d0,d0
  761.     lea    0(a2,d0),a3
  762.     move.l    a0,a4
  763.     moveq    #8-1,d0
  764. linelp    move.b    (a3)+,d1
  765.     moveq    #8-1,d2
  766. expndlp    lsl.b    #1,d1
  767.     move    sr,d4
  768.     tst    d7
  769.     bne.s    hires0
  770.     roxl    #1,d3
  771.     move    d4,sr
  772.     roxl    #1,d3
  773.     bra.s    nxtshft
  774. hires0    roxl.l    #1,d3
  775.     move    d4,sr
  776.     roxl.l    #1,d3
  777.     move    d4,sr
  778.     roxl.l    #1,d3
  779.     move    d4,sr
  780.     roxl.l    #1,d3
  781. nxtshft    dbra    d2,expndlp
  782.     tst    d7
  783.     bne.s    hires1
  784.     move    d3,(a4)
  785.     move    d3,160(a4)
  786.     bra.s    addisp
  787. hires1    move.l    d3,(a4)
  788.     move.l    d3,80(a4)
  789.     move.l    d3,160(a4)
  790.     move.l    d3,240(a4)
  791. addisp    lea    320(a4),a4
  792.     dbra    d0,linelp
  793.     tst    d7
  794.     bne.s    hires2
  795.     addq.l    #8,a0
  796.     bra.s    prvflp
  797. hires2    addq.l    #4,a0
  798.     bra.s    prvflp
  799.  
  800. donevf    rts
  801.  
  802. starti    move.l    $44e.w,a0
  803.     tst.l    32000-4(a0)
  804.     beq.s    stilclr
  805.     move    #1,$8240.w
  806.     move.l    $456.w,a0
  807.     clr.l    28(a0)
  808. stilclr    rts
  809. endi
  810.  
  811. mess    dc.b    1,2,3,4,5,10,6,3,7,7,10,8,2,5,9,0
  812.  
  813. chars    dc.b    195,102,102,102,102,102,60,24
  814.     dc.b    48,0,24,12,12,12,12,0
  815.     dc.b    0,192,124,118,96,96,96,0
  816.     dc.b    0,0,230,102,102,110,59,0
  817.     dc.b    0,0,62,96,60,134,124,0
  818.     dc.b    14,24,24,24,62,24,24,0
  819.     dc.b    0,0,60,102,126,96,62,0
  820.     dc.b    12,6,6,62,102,102,58,0
  821.     dc.b    0,192,102,108,120,108,230,0
  822.     dc.b    0,0,0,0,0,0,0,0
  823. endanti
  824.  
  825. * Various data
  826.  
  827.  
  828. name    dc.b    'virus.pic',0
  829.  
  830. nomem    dc.b    27,'EOut of memory',13,10,13,10
  831.     dc.b    'Press any key',0
  832.  
  833. exec    dc.b    6,'Executable, possible virus!',0
  834. noexec    dc.b    6,'Boot sector not executable',0
  835. antin    dc.b    5,'Disk has anti-virus installed',0
  836.  
  837. insmess    dc.b    9,'Anti virus installed',0
  838. remmess    dc.b    4,'Executable boot sector removed',0
  839.  
  840. mainmess
  841.     dc.b    10,127,' 1988 M.S.Powell',0
  842.  
  843. e
  844. errors    dc.b    e0-e,e0-e,e0-e,e0-e,e1-e,e0-e,e0-e,e0-e,e2-e,e0-e,e3-e
  845.     dc.b    e4-e,e0-e,e5-e,e0-e,e0-e,e0-e,e0-e
  846. e0    dc.b    12,'General error',0
  847. e1    dc.b    14,'CRC error',0
  848. e2    dc.b    11,'Sector not found',0
  849. e3    dc.b    13,'Write error',0
  850. e4    dc.b    14,'Read error',0
  851. e5    dc.b    9,'Disk write protected',0    
  852.  
  853.     even
  854.  
  855. mousedatapnt
  856.     dc.l    mousedata
  857. mousedata
  858.     dc.w    $7F,$FF80,0,$7F,$FF80,$7F00,$FF,$FF00
  859.     dc.w    $7E00,$1FF,$FE00,$7C00,$3FF,$FC00,$7800,$1FF
  860.     dc.w    $FE00,$7400,$8FF,$F700,$6200,$1C7F,$E380,$4100
  861.     dc.w    $3E3F,$C1C0,$80,$FF1F,$E0,$40,$FF8F,$70
  862.     dc.w    $20,$FFC7,$38,$10,$FFE3,$1C,8,$FFF1
  863.     dc.w    14,4,$FFFB,4,0,$FFFF,0,0
  864. busydata
  865.     dc.w    $8003,$7FFC,$3FE0,1,$FE3E,$3FE0,0,$FE3F
  866.     dc.w    $3FE0,0,$FE3F,$3FE0,0,$FE3F,$3FE0,0
  867.     dc.w    $FFFF,$3FE0,0,$FFFF,0,0,$FFFF,0
  868.     dc.w    0,$FFFF,0,0,$FFFF,0,0,$FFFF
  869.     dc.w    0,0,$FFFF,0,0,$FFFF,0,0
  870.     dc.w    $FFFF,0,0,$FFFF,0,$8001,$7FFE,0
  871.  
  872. mouse    dc.w    0
  873. keys    dc.w    0
  874. leftbutton    dc.w    0
  875. mousex    dc.w    0
  876. mousey    dc.w    0
  877. length    dc.w    0
  878. bufpnt    dc.l    0
  879. keybuf    ds.b    8
  880. keydat    dc.b    7,4,$e,0,0,0,0,0,9,1,$3f,0,$c7
  881. keydat1    dc.b    7,0,8
  882.  
  883. chrset    dc.b    0,0,0,0,0,0,0,0
  884.     dc.b    0,24,60,102,102,126,102,0
  885.     dc.b    0,252,102,124,102,102,252,0
  886.     dc.b    0,62,102,96,96,102,60,0
  887.     dc.b    0,252,102,102,102,102,252,0
  888.     dc.b    0,254,98,120,96,98,254,0
  889.     dc.b    0,254,98,120,96,96,240,0
  890.     dc.b    0,124,196,192,222,204,124,0
  891.     dc.b    0,102,102,126,102,102,102,0
  892.     dc.b    0,255,153,24,24,153,255,0
  893.     dc.b    0,30,12,12,12,204,120,0
  894.     dc.b    0,247,108,120,120,108,246,3
  895.     dc.b    0,240,96,96,96,98,254,0
  896.     dc.b    0,198,238,254,214,198,198,0
  897.     dc.b    0,231,118,126,110,102,231,0
  898.     dc.b    0,60,102,102,102,102,60,0
  899.     dc.b    0,252,102,102,124,96,240,0
  900.     dc.b    0,60,102,102,102,108,54,1
  901.     dc.b    0,252,102,102,124,108,246,3
  902.     dc.b    0,62,96,60,6,6,124,0
  903.     dc.b    0,255,153,24,24,24,60,0
  904.     dc.b    0,102,102,102,102,102,60,0
  905.     dc.b    0,102,102,102,60,60,24,0
  906.     dc.b    0,198,198,214,254,238,198,0
  907.     dc.b    0,231,102,60,60,102,231,0
  908.     dc.b    0,231,98,52,24,24,60,0
  909.     dc.b    0,254,140,24,48,98,254,0
  910.     dc.b    0,0,120,204,204,204,118,0
  911.     dc.b    224,96,124,102,102,102,252,0
  912.     dc.b    0,0,62,102,96,102,60,0
  913.     dc.b    14,12,124,204,204,204,118,0
  914.     dc.b    0,0,60,102,126,96,62,0
  915.     dc.b    28,48,48,48,124,48,48,48
  916.     dc.b    0,6,60,102,102,62,96,126
  917.     dc.b    224,96,124,102,102,102,247,0
  918.     dc.b    24,0,56,24,24,24,60,0
  919.     dc.b    6,0,14,6,6,6,102,60
  920.     dc.b    224,96,108,120,120,108,246,3
  921.     dc.b    56,24,24,24,24,24,60,0
  922.     dc.b    0,0,254,219,219,219,219,0
  923.     dc.b    0,0,220,102,102,102,247,0
  924.     dc.b    0,0,60,102,102,102,60,0
  925.     dc.b    0,0,252,102,102,124,96,240
  926.     dc.b    0,0,126,204,204,124,12,14
  927.     dc.b    0,0,220,102,96,96,240,0
  928.     dc.b    0,0,62,96,60,6,124,0
  929.     dc.b    24,24,126,24,24,24,14,0
  930.     dc.b    0,0,238,102,102,102,59,0
  931.     dc.b    0,0,231,98,116,56,16,0
  932.     dc.b    0,0,198,214,254,124,108,0
  933.     dc.b    0,0,102,60,24,60,102,0
  934.     dc.b    0,0,102,102,102,62,6,124
  935.     dc.b    0,0,126,76,24,50,126,0
  936.     dc.b    0,0,0,0,0,24,24,48
  937.     dc.b    0,0,0,0,0,24,24,0
  938.     dc.b    0,24,24,24,24,0,24,0
  939.     dc.b    0,60,102,110,118,102,60,0
  940.     dc.b    0,24,56,24,24,24,60,0
  941.     dc.b    0,60,102,12,48,98,126,0
  942.     dc.b    0,126,76,24,12,102,60,0
  943.     dc.b    0,12,28,60,108,126,12,0
  944.     dc.b    0,126,98,124,6,102,60,0
  945.     dc.b    0,60,96,124,102,102,60,0
  946.     dc.b    0,126,70,12,24,48,48,0
  947.     dc.b    0,60,102,60,102,102,60,0
  948.     dc.b    0,60,102,62,6,12,56,0
  949.     dc.b    %00111100
  950.     dc.b    %01000010
  951.     dc.b    %10011001
  952.     dc.b    %10100001
  953.     dc.b    %10100001
  954.     dc.b    %10011001
  955.     dc.b    %01000010
  956.     dc.b    %00111100
  957.  
  958. rectdat    dc.w    96,40,111,55
  959.     dc.w    208,40,223,55
  960.  
  961.     dc.w    32,64,95,95
  962.     dc.w    224,64,287,95
  963.     dc.w    32,120,95,151
  964.     dc.w    224,120,287,151
  965.  
  966. recflag    dc.b    0,0,0,0,0,0
  967.  
  968. palette    dc.w    $000,$105,$333,$555,$777,$040,$020,$600
  969.     dc.w    $625,$500,$666,$000,$551,$200,$231,$666
  970.  
  971. routlst    dc.l    drivea,driveb,examine,install,remove,desktop
  972. drive    dc.w    0
  973.  
  974. oldier    dc.l    0
  975. oldkeyb    dc.l    0
  976. oldtimb    dc.l    0
  977. oldssp    dc.l    0
  978. oldvblq    dc.l    0
  979. physcrn    dc.l    0
  980. logscrn    dc.l    0
  981. oldres    dc.w    0
  982. res    dc.w    0
  983. screen    dc.l    0
  984.  
  985. drivedata
  986.     dc.w    0,0,$FFFF,0,0,$8001,0,0
  987.     dc.w    $8001,$180,0,$8181,$180,$240,$83C1,$3C0
  988.     dc.w    0,$83C1,$3C0,$420,$87E1,$660,0,$8661
  989.     dc.w    $7E0,$810,$8FF1,$C30,$240,$8E71,$C30,$1008
  990.     dc.w    $9C39,$1818,$420,$9C39,$810,$1008,$9819,0
  991.     dc.w    0,$8001,0,0,$8001,0,0,$FFFF
  992.     dc.w    0,$FFFF,0,$7FFE,$FFFF,0,$4002,$C003
  993.     dc.w    $3FFC,$5E7A,$DE7B,$3FFC,$5E7A,$DE7B,$3DBC,$5C3A
  994.     dc.w    $DC3B,$3FFC,$5C3A,$DC3B,$3BDC,$599A,$D99B,$3FFC
  995.     dc.w    $581A,$D81B,$37EC,$53CA,$D3CB,$3DBC,$53CA,$D3CB
  996.     dc.w    $2FF4,$47E2,$C7E3,$3BDC,$57EA,$D7EB,$2FF4,$4002
  997.     dc.w    $C003,$3FFC,$7FFE,$FFFF,0,0,$FFFF,0
  998.     dc.w    0,0,$FFFF,0,0,$8001,0,0
  999.     dc.w    $8001,$FC0,$20,$8FE1,$1FE0,$10,$9FF1,$1830
  1000.     dc.w    $640,$9E71,$1830,$4C0,$9CF1,$1FE0,$10,$9FF1
  1001.     dc.w    $1FF0,0,$9FF1,$1818,$620,$9E39,$1818,$460
  1002.     dc.w    $9C79,$1FF0,$8,$9FF9,$FE0,$10,$8FF1,0
  1003.     dc.w    0,$8001,0,0,$8001,0,0,$FFFF
  1004.     dc.w    0,$FFFF,0,$7FFE,$FFFF,0,$4002,$C003
  1005.     dc.w    $3FFC,$503A,$D03B,$3FFC,$401A,$C01B,$3FFC,$47CA
  1006.     dc.w    $C7CB,$3FFC,$47CA,$C7CB,$3FFC,$401A,$C01B,$3FFC
  1007.     dc.w    $400A,$C00B,$3FFC,$47E2,$C7E3,$3FFC,$47E2,$C7E3
  1008.     dc.w    $3FFC,$400A,$C00B,$3FFC,$501A,$D01B,$3FFC,$4002
  1009.     dc.w    $C003,$3FFC,$7FFE,$FFFF,0,0,$FFFF,0
  1010.  
  1011. icondat
  1012.     dc.w    0,0,0,0,0,0,0,0
  1013.     dc.w    0,0,0,0,0,0,0,0
  1014.     dc.w    0,0,0,0,0,0,0,0
  1015.     dc.w    0,0,0,0,0,0,0,0
  1016.     dc.w    0,0,0,0,0,0,0,0
  1017.     dc.w    0,0,0,0,0,0,0,0
  1018.     dc.w    0,0,0,0,0,0,0,0
  1019.     dc.w    0,0,0,0,0,0,0,0
  1020.     dc.w    0,0,0,0,0,0,0,0
  1021.     dc.w    14,15,$30,$AAAA,$FFFF,0,$B000,$F800
  1022.     dc.w    0,0,0,0,$33,$73,12,$D555
  1023.     dc.w    $FFFF,0,$5600,$FF00,0,0,0,0
  1024.     dc.w    12,$7C,3,$7AAA,$7FFF,$8000,$AAC0,$FFE0
  1025.     dc.w    0,0,0,0,1,$7F,0,$8FFF
  1026.     dc.w    $8FFF,$7000,$FFF8,$FFFC,0,0,0,0
  1027.     dc.w    0,$7F,0,$33FF,$F3FF,$C00,$FFFE,$FFFF
  1028.     dc.w    0,0,0,0,0,$7F,0,$C7F
  1029.     dc.w    $FC7F,$380,$FFFF,$FFFF,0,$C000,$E000,0
  1030.     dc.w    0,$7F,0,$19F,$FF9F,$60,$FFFF,$FFFF
  1031.     dc.w    0,$F000,$F800,0,0,$7F,0,$60
  1032.     dc.w    $FFE0,$1F,0,0,$FFFF,0,$200,$FC00
  1033.     dc.w    0,$7F,0,$1F,$FFFF,0,$FFFF,$FFFF
  1034.     dc.w    0,$FE00,$FE00,0,0,$7F,0,7
  1035.     dc.w    $FFFF,0,$FFFF,$FFFF,0,$FE00,$FE00,0
  1036.     dc.w    0,$3F,0,7,$FFFF,0,$FF00,$FFFF
  1037.     dc.w    0,$1E00,$FE00,0,0,$1F,0,6
  1038.     dc.w    $FFFF,0,0,$FFFF,0,$600,$FE00,0
  1039.     dc.w    0,7,0,5,$FFFE,0,$C000,0
  1040.     dc.w    $3FFF,$3600,$E00,$C000,0,1,0,5
  1041.     dc.w    $FFFE,0,$FFFF,$3FFF,0,$F600,$CE00,0
  1042.     dc.w    0,0,0,4,$7FFF,0,0,$FFFF
  1043.     dc.w    0,$E00,$FE00,0,0,0,0,7
  1044.     dc.w    $1FFF,0,$FC00,$FFFF,0,$7E00,$FE00,0
  1045.     dc.w    0,0,0,7,$7FF,0,$F800,$F800
  1046.     dc.w    $7FF,$FE00,$FE00,$3000,0,0,0,7
  1047.     dc.w    $1FF,0,$F001,$FFFF,0,$FE00,$FE00,$6000
  1048.     dc.w    0,0,0,7,$7F,0,$FFFF,$FFFF
  1049.     dc.w    0,$FC00,$FE00,0,0,0,0,1
  1050.     dc.w    $1F,0,$FFFF,$FFFF,0,$F800,$FC00,0
  1051.     dc.w    0,0,0,0,3,0,0,$FFFF
  1052.     dc.w    0,0,$F800,0,0,0,0,0
  1053.     dc.w    0,0,0,0,0,0,0,0
  1054.     dc.w    0,0,0,0,0,0,0,0
  1055.     dc.w    0,0,0,0,0,0,0,0
  1056.     dc.w    0,0,0,0,0,0,0,0
  1057.     dc.w    0,0,0,0,0,0,0,0
  1058.     dc.w    0,0,0,0,0,0,0,0
  1059.     dc.w    0,0,0,0,0,0,0,0
  1060.     dc.w    0,0,0,$600,0,0,$FF00,0
  1061.     dc.w    $FF00,0,0,0,0,0,0,$F03
  1062.     dc.w    0,3,$81C0,$7E00,$FFC0,0,0,0
  1063.     dc.w    0,0,0,$1F86,1,7,$1E0,$8000
  1064.     dc.w    $81E0,0,0,0,0,0,0,$3FD8
  1065.     dc.w    6,$1E,$70,$4008,$78,0,0,0
  1066.     dc.w    0,0,0,$7FF0,9,$18,$18,$E000
  1067.     dc.w    $18,0,0,0,0,0,0,$FFF0
  1068.     dc.w    7,$30,8,$F004,12,0,0,0
  1069.     dc.w    1,0,0,$FFE2,$17,$70,12,$F802
  1070.     dc.w    14,0,0,0,3,0,0,$FF62
  1071.     dc.w    $8B,$64,4,$FC02,6,0,0,0
  1072.     dc.w    7,0,0,$FEC0,$12B,$E4,6,$FE01
  1073.     dc.w    7,0,0,0,15,0,0,$FC84
  1074.     dc.w    $357,$C8,2,$F709,3,0,0,0
  1075.     dc.w    $1E,0,1,$F884,$757,$C8,$C0A,$E389
  1076.     dc.w    3,0,0,0,$3C,0,3,$7C8C
  1077.     dc.w    $35F,$80C0,$1E0A,$C1C9,3,0,0,0
  1078.     dc.w    $78,0,7,$3E88,$15F,$C0C0,$3F12,$80F1
  1079.     dc.w    11,0,0,0,$F0,0,15,$1F88
  1080.     dc.w    $5F,$E0C0,$7F92,$71,11,0,0,0
  1081.     dc.w    $1E0,0,$1F,$F80,$5E,$F0C0,$FFE2,$29
  1082.     dc.w    $13,0,0,0,$1C0,0,$3F,$7C1
  1083.     dc.w    $2C,$F8E0,$FFE6,$21,$17,0,0,0
  1084.     dc.w    $380,0,$7F,$3E3,8,$FC60,$FFE6,$30
  1085.     dc.w    6,0,0,0,$100,0,$FF,$1E7
  1086.     dc.w    $10,$FE70,$FF8E,$60,14,0,0,0
  1087.     dc.w    0,$100,$FF,$F7,0,$FF30,$FF0E,$E0
  1088.     dc.w    14,0,0,0,0,$80,$7F,$79
  1089.     dc.w    0,$FF98,$FE1E,$180,$1E,0,0,0
  1090.     dc.w    0,$40,$3F,$26,$18,$FFDE,$7C7F,$200
  1091.     dc.w    $7F,0,0,0,0,$20,$1F,$1B
  1092.     dc.w    4,$FFE7,$81FF,0,$81FF,$8000,0,$8000
  1093.     dc.w    0,$10,15,$38,3,$FFC3,$FF01,$FE
  1094.     dc.w    $FFFF,$E000,0,$E000,0,8,7,$70
  1095.     dc.w    0,$FF80,0,$FF01,$FF01,$7000,$8000,$F000
  1096.     dc.w    0,4,3,$E0,0,$FF00,0,0
  1097.     dc.w    0,$3800,$C000,$F800,0,2,1,$1C0
  1098.     dc.w    0,$FE00,0,0,0,$1E00,$6000,$7E00
  1099.     dc.w    0,1,0,$380,0,$FC00,0,0
  1100.     dc.w    0,$700,$3800,$3F00,0,0,0,$700
  1101.     dc.w    $8000,$7800,0,0,0,$380,$C00,$F80
  1102.     dc.w    0,0,0,$E00,$4000,$3000,0,0
  1103.     dc.w    0,$180,$640,$7C0,0,0,0,$1C00
  1104.     dc.w    $2000,0,0,0,0,0,$3C0,$3C0
  1105.     dc.w    0,0,0,$1800,0,0,0,0
  1106.     dc.w    0,0,$180,$180,0,0,0,0
  1107.     dc.w    0,0,0,0,0,0,0,0
  1108.     dc.w    0,0,0,0,0,0,0,0
  1109.     dc.w    0,0,0,0,0,0,0,0
  1110.     dc.w    0,0,0,0,0,0,0,0
  1111.     dc.w    $3FF,0,0,$FFFF,0,0,$C000,0
  1112.     dc.w    0,0,0,0,$7FF,0,0,$FFFF
  1113.     dc.w    0,0,$E000,0,0,0,0,0
  1114.     dc.w    $3FF,$7FF,0,$FFFF,$F000,0,$E000,0
  1115.     dc.w    0,0,0,0,$200,$600,$1FF,$1FFF
  1116.     dc.w    $1000,$E000,$E000,0,0,0,0,0
  1117.     dc.w    $200,$600,$1FF,$1FFF,$1000,$E000,$E000,0
  1118.     dc.w    0,0,0,0,$200,$600,$1FF,$1FFF
  1119.     dc.w    $1000,$E000,$E000,0,0,0,0,0
  1120.     dc.w    $200,$600,$1FF,$1FFF,$1000,$E000,$E00C,12
  1121.     dc.w    12,0,0,0,$200,$600,$1FF,$1FFF
  1122.     dc.w    $1000,$E000,$E01C,$1C,$1C,0,0,0
  1123.     dc.w    $200,$600,$1FF,$1FFF,$1000,$E000,$E03C,$3C
  1124.     dc.w    $3C,0,0,0,$200,$600,$1FF,$1FFF
  1125.     dc.w    $1000,$E000,$E07C,$7C,$7C,0,0,0
  1126.     dc.w    $200,$600,$1FF,$1F80,$107F,$E000,$FF,$E0FF
  1127.     dc.w    $FF,$EEE0,$EEE0,$EEE0,$200,$600,$1FF,$1F00
  1128.     dc.w    $10FF,$E000,$1FF,$E1FF,$1FF,$EEE0,$EEE0,$EEE0
  1129.     dc.w    $200,$600,$1FF,$1F00,$10FF,$E000,$3FF,$E3FF
  1130.     dc.w    $3FF,$EEE0,$EEE0,$EEE0,$200,$600,$1FF,$1F00
  1131.     dc.w    $10FF,$E000,$7FF,$E7FF,$7FF,$EEE0,$EEE0,$EEE0
  1132.     dc.w    $200,$600,$1FF,$1F00,$10FF,$E000,$3FF,$E3FF
  1133.     dc.w    $3FF,$EEE0,$EEE0,$EEE0,$200,$600,$1FF,$1F00
  1134.     dc.w    $10FF,$E000,$1FF,$E1FF,$1FF,$EEE0,$EEE0,$EEE0
  1135.     dc.w    $200,$600,$1FF,$1F00,$10FF,$E000,$FF,$E0FF
  1136.     dc.w    $FF,$EEE0,$EEE0,$EEE0,$200,$600,$1FF,$1F00
  1137.     dc.w    $10FF,$E000,$7C,$E07C,$7C,0,0,0
  1138.     dc.w    $200,$600,$1FF,$1F7F,$1080,$E000,$C03C,$203C
  1139.     dc.w    $3C,0,0,0,$200,$600,$1FF,$1F7F
  1140.     dc.w    $1080,$E000,$C01C,$201C,$1C,0,0,0
  1141.     dc.w    $200,$600,$1FF,$1F7F,$1080,$E000,$C00C,$200C
  1142.     dc.w    12,0,0,0,$200,$600,$1FF,$1F7F
  1143.     dc.w    $1080,$E000,$C000,$2000,0,0,0,0
  1144.     dc.w    $200,$600,$1FF,$1F00,$10FF,$E000,0,$E000
  1145.     dc.w    0,0,0,0,$200,$600,$1FF,$1F80
  1146.     dc.w    $107F,$E000,0,$E000,0,0,0,0
  1147.     dc.w    $200,$600,$1FF,$1FFF,$1000,$E000,$E000,0
  1148.     dc.w    0,0,0,0,$3FF,$7FF,0,$FFFF
  1149.     dc.w    $F000,0,$E000,0,0,0,0,0
  1150.     dc.w    $7FF,0,0,$FFFF,0,0,$C000,0
  1151.     dc.w    0,0,0,0,$3FF,0,0,$FFFF
  1152.     dc.w    0,0,$8000,0,0,0,0,0
  1153.     dc.w    0,0,0,0,0,0,0,0
  1154.     dc.w    0,0,0,0,0,0,0,0
  1155.     dc.w    0,0,0,0,0,0,0,0
  1156.     dc.w    0,0,0,0,0,0,0,0
  1157.     dc.w    0,0,0,0,0,0,0,0
  1158.     dc.w    0,0,0,0,0,0,0,0
  1159.     dc.w    $7FF,0,0,$FFFF,0,0,$8000,0
  1160.     dc.w    0,0,0,0,$FFF,0,0,$FFFF
  1161.     dc.w    0,0,$C000,0,0,0,0,0
  1162.     dc.w    $7FF,$FFF,0,$FFFF,$E000,0,$C000,0
  1163.     dc.w    0,0,0,0,$400,$C00,$3FF,$3FFF
  1164.     dc.w    $2000,$C000,$C000,0,0,0,0,0
  1165.     dc.w    $400,$C00,$3FF,$3FFF,$2000,$C000,$C000,0
  1166.     dc.w    0,0,0,0,$400,$C00,$3FF,$3FFF
  1167.     dc.w    $2000,$C000,$C000,0,0,0,0,0
  1168.     dc.w    $400,$C00,$3FF,$3FFF,$2000,$C000,$C000,0
  1169.     dc.w    0,0,0,0,$400,$C00,$3FF,$3FFF
  1170.     dc.w    $2000,$C000,$C000,0,0,$1800,$1800,$1800
  1171.     dc.w    $400,$C00,$3FF,$3FFF,$2000,$C000,$C000,0
  1172.     dc.w    0,$1C00,$1C00,$1C00,$400,$C00,$3FF,$3FFF
  1173.     dc.w    $2000,$C000,$C000,0,0,$1E00,$1E00,$1E00
  1174.     dc.w    $400,$C00,$3FF,$3F00,$20FF,$C000,0,$C000
  1175.     dc.w    0,$1F00,$1F00,$1F00,$400,$C00,$3FF,$3E00
  1176.     dc.w    $21FF,$C000,$3BB,$C3BB,$3BB,$FF80,$FF80,$FF80
  1177.     dc.w    $400,$C00,$3FF,$3E00,$21FF,$C000,$3BB,$C3BB
  1178.     dc.w    $3BB,$FFC0,$FFC0,$FFC0,$400,$C00,$3FF,$3E00
  1179.     dc.w    $21FF,$C000,$3BB,$C3BB,$3BB,$FFE0,$FFE0,$FFE0
  1180.     dc.w    $400,$C00,$3FF,$3E00,$21FF,$C000,$3BB,$C3BB
  1181.     dc.w    $3BB,$FFF0,$FFF0,$FFF0,$400,$C00,$3FF,$3E00
  1182.     dc.w    $21FF,$C000,$3BB,$C3BB,$3BB,$FFE0,$FFE0,$FFE0
  1183.     dc.w    $400,$C00,$3FF,$3E00,$21FF,$C000,$3BB,$C3BB
  1184.     dc.w    $3BB,$FFC0,$FFC0,$FFC0,$400,$C00,$3FF,$3E00
  1185.     dc.w    $21FF,$C000,$3BB,$C3BB,$3BB,$FF80,$FF80,$FF80
  1186.     dc.w    $400,$C00,$3FF,$3EFF,$2100,$C000,$8000,$4000
  1187.     dc.w    0,$1F00,$1F00,$1F00,$400,$C00,$3FF,$3EFF
  1188.     dc.w    $2100,$C000,$8000,$4000,0,$1E00,$1E00,$1E00
  1189.     dc.w    $400,$C00,$3FF,$3EFF,$2100,$C000,$8000,$4000
  1190.     dc.w    0,$1C00,$1C00,$1C00,$400,$C00,$3FF,$3EFF
  1191.     dc.w    $2100,$C000,$8000,$4000,0,$1800,$1800,$1800
  1192.     dc.w    $400,$C00,$3FF,$3E00,$21FF,$C000,0,$C000
  1193.     dc.w    0,0,0,0,$400,$C00,$3FF,$3F00
  1194.     dc.w    $20FF,$C000,0,$C000,0,0,0,0
  1195.     dc.w    $400,$C00,$3FF,$3FFF,$2000,$C000,$C000,0
  1196.     dc.w    0,0,0,0,$7FF,$FFF,0,$FFFF
  1197.     dc.w    $E000,0,$C000,0,0,0,0,0
  1198.     dc.w    $FFF,0,0,$FFFF,0,0,$8000,0
  1199.     dc.w    0,0,0,0,$FFF,0,0,$FFFF
  1200.     dc.w    0,0,0,0,0,0,0,0
  1201.     dc.w    0,0,0,0,0,0,0,0
  1202.     dc.w    0,0,0,0,0,0,0,0
  1203.     dc.w    0,0,0,0,0,0,0,0
  1204.     dc.w    0,0,0,$100,$C0,$1C0,0,0
  1205.     dc.w    0,0,0,0,0,0,0,$F00
  1206.     dc.w    $10C0,$1FC0,0,0,0,0,0,0
  1207.     dc.w    0,1,1,$FF00,$C0,$FFC0,0,0
  1208.     dc.w    0,0,0,0,3,4,7,$FF00
  1209.     dc.w    $DE,$FFDE,0,0,0,0,0,0
  1210.     dc.w    7,0,7,$FF3C,$C2,$FFC2,0,0
  1211.     dc.w    0,0,0,0,7,0,7,$FF3C
  1212.     dc.w    $C2,$FFC2,0,0,0,0,0,0
  1213.     dc.w    7,0,7,$FF3C,$C2,$FFC2,0,0
  1214.     dc.w    0,0,0,0,7,0,7,$FF3C
  1215.     dc.w    $C2,$FFC2,$800,$800,$800,0,0,0
  1216.     dc.w    7,0,7,$FF3C,$C2,$FFC2,$1800,$1800
  1217.     dc.w    $1800,0,0,0,7,0,7,$FF3C
  1218.     dc.w    $C2,$FFC2,$3800,$3800,$3800,0,0,0
  1219.     dc.w    7,0,7,$FF3C,$C2,$FFC2,$7800,$7800
  1220.     dc.w    $7800,0,0,0,7,0,7,$FF3C
  1221.     dc.w    $C2,$FFC2,$F800,$F800,$F800,0,0,0
  1222.     dc.w    7,0,7,$FF3D,$C1,$FFC1,$FFEE,$FFEE
  1223.     dc.w    $FFEE,$E000,$E000,$E000,7,0,7,$F33B
  1224.     dc.w    $4C3,$FBC3,$FFEE,$FFEE,$FFEE,$E000,$E000,$E000
  1225.     dc.w    7,0,7,$F137,$6C7,$FBC7,$FFEE,$FFEE
  1226.     dc.w    $FFEE,$E000,$E000,$E000,7,0,7,$F13F
  1227.     dc.w    $6CF,$FBCF,$FFEE,$FFEE,$FFEE,$E000,$E000,$E000
  1228.     dc.w    7,0,7,$F137,$EC7,$F3C7,$FFEE,$FFEE
  1229.     dc.w    $FFEE,$E000,$E000,$E000,7,0,7,$F13B
  1230.     dc.w    $EC3,$FFC3,$FFEE,$FFEE,$FFEE,$E000,$E000,$E000
  1231.     dc.w    7,0,7,$FF3D,$C1,$FFC1,$FFEE,$FFEE
  1232.     dc.w    $FFEE,$E000,$E000,$E000,7,0,7,$FF3C
  1233.     dc.w    $C2,$FFC2,$F800,$F800,$F800,0,0,0
  1234.     dc.w    7,0,7,$FF3C,$C2,$FFC2,$7800,$7800
  1235.     dc.w    $7800,0,0,0,7,0,7,$FF3C
  1236.     dc.w    $C2,$FFC2,$3800,$3800,$3800,0,0,0
  1237.     dc.w    7,0,7,$FF3C,$C2,$FFC2,$1800,$1800
  1238.     dc.w    $1800,0,0,0,7,0,7,$FF3C
  1239.     dc.w    $C2,$FFC2,$800,$800,$800,0,0,0
  1240.     dc.w    7,0,7,$FF3C,$C2,$FFC2,0,0
  1241.     dc.w    0,0,0,0,3,4,7,$FF3C
  1242.     dc.w    $C2,$FFC2,0,0,0,0,0,0
  1243.     dc.w    0,1,1,$FF00,$DE,$FFDE,0,0
  1244.     dc.w    0,0,0,0,0,0,0,$1F00
  1245.     dc.w    $60C0,$7FC0,0,0,0,0,0,0
  1246.     dc.w    0,0,0,$F00,$10C0,$1FC0,0,0
  1247.     dc.w    0,0,0,0,0,0,0,$300
  1248.     dc.w    $4C0,$7C0,0,0,0,0,0,0
  1249.     dc.w    0,0,0,$100,$C0,$1C0,0,0
  1250.     dc.w    0,0,0,0,0,0,0,0
  1251.     dc.w    $40,$40,0,0,0,0,0,0
  1252.  
  1253. scrdata    dc.l    0,0,$7FF0000,0,$3FF0000,0,$F8000000,0,$70000,0
  1254.     dc.l    $C7C00000,0,$1FC00000,0,0,0,0,0,0,0,0,0,$10000
  1255.     dc.l    0,$F3F00000,0,$7F00000,0,$1FC0000,0,$3F0000,0
  1256.     dc.l    $80000000,0,0,0,0,0,0,0,0,0,$C010000,$3FE0000
  1257.     dc.l    $83FF0000,$1FF0000,$F8000000,$F0000000,$C0003,$30000
  1258.     dc.l    $6C608380,$83800000,$1FC00F80,$F800000,0,0,0,0,0,0
  1259.     dc.l    0,0,$30000,0,$FFF8E1E0,$E1E0,$4100000,$3E003E0
  1260.     dc.l    $3FE0000,$F800F8,$60001F,$1F001F,$C0000000,0,0,0,0,0
  1261.     dc.l    0,0,0,0,$18000000,$7FF0000,$C3FF0000,$1FF0000
  1262.     dc.l    $F8000000,$F0000000,$80007,$70000,$2820C7C0,$C7C00000
  1263.     dc.l    $1FC00F80,$F800000,0,0,0,0,0,0,0,0,$30001,1
  1264.     dc.l    $FFF8F3F0,$F3F0,$4100000,$3E003E0,$3FE0000,$1FC01FC
  1265.     dc.l    $40003F,$3F003F,$40008000,$80008000,0,0,0,0,0,0,0
  1266.     dc.l    0,$10200000,$FDF0000,$43FF0000,$801F0000,$F8000000,0
  1267.     dc.l    $80007,$70000,$2820C7C0,$C7C00000,$1FC00000,0,0,0,0
  1268.     dc.l    0,0,0,0,0,$30001,1,$FFF8F7E0,$F7E0,$7F00000,0
  1269.     dc.l    $3FE0000,$FC00FC,$60001F,$1F001F,$40008000,$80008000,0
  1270.     dc.l    0,0,0,0,0,0,0,$10500000,$F8F0000,$403F0000
  1271.     dc.l    $801F0000,$80000000,0,$80007,$70000,$2820C7C0,$C7C00000
  1272.     dc.l    $3F800000,0,$1FFE0000,0,$3E30000,0,$E03F0000,0
  1273.     dc.l    $FC000000,0,$30001,1,$FFF0F7C0,$F7C0,$FE00000,0
  1274.     dc.l    $1FE0000,$7C007C,$30000F,$F000F,$400F8000,$80008000
  1275.     dc.l    $FE030000,0,$FFC00000,0,0,0,0,0,$105F0000,$F800000
  1276.     dc.l    $C03F0000,$1F0000,$80000000,0,$80007,$70000,$2820C7C0
  1277.     dc.l    $C7C00000,$7FC01F00,$1F000000,$30030000,$FFC,$7F70000
  1278.     dc.l    $1C1,$F060001F,$C01F,$600F800,$F800,$30001,1,$FFE0FF80
  1279.     dc.l    $FF80,$18300000,$7C007C0,$FE0000,$7C007C,$10000F,$F000F
  1280.     dc.l    $401F8007,$80078007,$FF06FC00,$FC01FC00,$600000,$FF800000
  1281.     dc.l    0,0,0,0,$103F0000,$FC00000,$3F0000,$1F0000,$80000000
  1282.     dc.l    0,$80007,$70000,$2820C7C0,$C7C00000,$7FC03F80,$3F800000
  1283.     dc.l    $20010000,$1FFE,$87F70000,$3E3,$F0C0003F,$E03F,$200FC00
  1284.     dc.l    $FC00,$30001,1,$FFC0FF00,$FF00,$10100000,$FE00FE0
  1285.     dc.l    $FE0000,$7C007C,$10000F,$F000F,$403F800F,$800F800F
  1286.     dc.l    $FF84FE00,$FE03FE00,$300000,$FFC00000,0,0,0,0
  1287.     dc.l    $18010000,$7FE0000,$803F0000,$1F0000,$80000000,0,$80007
  1288.     dc.l    $70000,$2820C7C0,$C7C00000,$7FC01F80,$1F800000,$20400000
  1289.     dc.l    $1FBF,$87F70000,$3E3,$F081007E,$E07E,$FE000000,0,$30001
  1290.     dc.l    1,$FF80FE00,$FE00,$18100000,$7E007E0,$FE0000,$7C007C
  1291.     dc.l    $10000F,$F000F,$403F801F,$801F801F,$FF841F00,$1F031F00
  1292.     dc.l    $8100000,$F7E00000,0,0,0,0,$C000000,$3FF0000
  1293.     dc.l    $C03F0000,$1F0000,$80000000,0,$80007,$70000,$2820C7C0
  1294.     dc.l    $C7C00000,$3FC00F80,$F800000,$20E10000,$1F1E,$87F70000
  1295.     dc.l    $3E3,$F083007C,$E07C,$F8000000,0,$30001,1,$FF80FC00
  1296.     dc.l    $FC00,$C100000,$3E003E0,$FE0000,$7C007C,$10000F,$F000F
  1297.     dc.l    $403F801F,$801F801F,$FF841F00,$1F031F00,$1C300000
  1298.     dc.l    $E3C00000,0,0,0,0,$7E00000,$1F0000,$403F0000
  1299.     dc.l    $801F0000,$80000000,0,$80007,$70000,$3820C7C0,$C7C00000
  1300.     dc.l    $1FC00F80,$F800000,$20BF0000,$1F00,$7F70000,$3E3
  1301.     dc.l    $F0C0003F,$E03F,$C00F000,$F000,$30001,1,$FFC0FF00,$FF00
  1302.     dc.l    $4100000,$3E003E0,$FE0000,$7C007C,$10000F,$F000F
  1303.     dc.l    $403F801F,$801F801F,$FF84FF00,$FF03FF00,$17E00000
  1304.     dc.l    $E0000000,0,0,0,0,$1FD00000,$F0000,$403F0000
  1305.     dc.l    $801F0000,$80000000,0,$C0003,$30000,$1060EF80,$EF800000
  1306.     dc.l    $1FC00F80,$F800000,$20800000,$1F00,$7F70000,$3E3
  1307.     dc.l    $F060001F,$E01F,$600F800,$F800,$30001,1,$FFE0FF80,$FF80
  1308.     dc.l    $4100000,$3E003E0,$FE0000,$7C007C,$10000F,$F000F
  1309.     dc.l    $403F801F,$801F801F,$FF84FE00,$FE03FE00,$10000000
  1310.     dc.l    $E0000000,0,0,0,0,$10500000,$F8F0000,$403F0000
  1311.     dc.l    $801F0000,$80000000,0,$40003,$30000,$40FF80,$FF800000
  1312.     dc.l    $3FE00F80,$F800000,$20800000,$1F00,$7FF0000,$3E3
  1313.     dc.l    $F03F0000,$E000,$82007C00,$7C00,$30001,1,$FFF0F7C0,$F7C0
  1314.     dc.l    $C180000,$3E003E0,$1FF0000,$7C007C,$30000F,$F000F
  1315.     dc.l    $603F801F,$801F801F,$FF040000,$30000,$10000000,$E0000000
  1316.     dc.l    0,0,0,0,$10200000,$FDF0000,$403F0000,$801F0000
  1317.     dc.l    $80000000,0,$60001,$10000,$C0FF00,$FF000000,$7FF01FC0
  1318.     dc.l    $1FC00000,$20800000,$1F00,$7FF0000,$3F7,$F0FF0000,$E000
  1319.     dc.l    $200FC00,$FC00,$30001,1,$FFF8F7E0,$F7E0,$180C0000
  1320.     dc.l    $7F007F0,$3FF0000,$FE00FE,$8060001F,$1F001F,$303FC01F
  1321.     dc.l    $C01FC01F,$FE048000,$80038000,$10000000,$E0000000,0,0
  1322.     dc.l    0,0,$18000000,$7FF0000,$C03F0000,$1F0000,$80000000,0
  1323.     dc.l    $30000,0,$180FE00,$FE000000,$7FF03FE0,$3FE00000
  1324.     dc.l    $20800000,$1F00,$7FF0000,$1FF,$F080007F,$E07F,$600F800
  1325.     dc.l    $F800,$30001,1,$FFF8F3F0,$F3F0,$10040000,$FF80FF8
  1326.     dc.l    $3FF0000,$1FF01FF,$8040003F,$3F003F,$103FE00F,$E00FE00F
  1327.     dc.l    $FE04FC00,$FC03FC00,$10000000,$E0000000,0,0,0,0
  1328.     dc.l    $C010000,$3FE0000,$803F0000,$E0000,$80000000,0,$10000,0
  1329.     dc.l    $83007C00,$7C000000,$7FF01FC0,$1FC00000,$31800000,$E00
  1330.     dc.l    $3FF0000,$FF,$F0C0003F,$C03F,$C00F000,$F000,$30000,0
  1331.     dc.l    $FFF8E1E0,$E1E0,$180C0000,$7F007F0,$3FF0000,$FE00FE
  1332.     dc.l    $8060001F,$1F001F,$301FC007,$C007C007,$FE06F800,$F801F800
  1333.     dc.l    $30000000,$C0000000,0,0,0,0,$7FF0000,0,$1F0000,0,0
  1334.     dc.l    0,0,0,$FE000000,0,$3FE00000,0,$1F000000,0,$1FF0000
  1335.     dc.l    0,$E07F0000,0,$F8000000,0,$10000,0,$F3F00000,0
  1336.     dc.l    $FF80000,0,$1FF0000,0,$3F0000,0,$E00F0000,0,$FC030000
  1337.     dc.l    0,$E0000000,0,0,0
  1338.  
  1339. oldpal
  1340. buffer    equ    oldpal+32
  1341. trash    equ    buffer+512
  1342. end    equ    trash+300
  1343.